#ifndef __IRENDERER_H__
#define __IRENDERER_H__

#include <string>
#include "RenderDefs.h"
#include "SkyBox.h"
#include "BaseDefs.h"
#include "ICamera.h"
#include "ITerrain.h"
#include "IBox.h"
#include "..\..\..\Firebox\codebase\include\Entity.h"

namespace coal
{
	class IMesh;
}

namespace steam
{
	namespace moon
	{
		class RenderState;

		class IRenderer
		{
		public:

			// virtual destructor
			virtual ~IRenderer() {}

			// render
			virtual void render() = 0;

			// create render-able mesh
			virtual unsigned int createAndRegisterMesh(const coal::IMesh* mesh) = 0;

			// register physics box
			virtual void registerBox(wheel::IBox* box) = 0;

			// toggle visibility
			virtual void setVisible(unsigned int id, bool visible) = 0;

			// create sky box
			virtual SkyBox& getSkyBox() = 0;

			// set terrain
			virtual void setTerrain(ITerrain* terrain) = 0;

			// create Terrain
			virtual ITerrain* getTerrain() = 0;

			// set camera
			virtual void setCamera(ICamera* camera) = 0;

			// get camera
			virtual ICamera* getCamera() = 0;


		};

	}

}

#endif